package com.united.ucts.modules.system.service;

import com.united.frame.common.module.service.IBaseService;
import com.united.ucts.modules.system.pojo.po.Menu;
import com.united.ucts.modules.system.pojo.po.Resource;
import com.united.ucts.modules.system.pojo.po.Role;

import java.util.List;

/**
 * 后台角色管理业务逻辑接口定义类
 *
 * @author Hudan
 * @version 1.0
 * @filename RoleService.java
 * @copyright <a href="www.united.cn">www.united.cn</a>
 * @date 2019-11-23
 */
public interface RoleService extends IBaseService<Role> {

    /**
     * 添加角色
     *
     * @param role 需要添加的角色信息
     * @return 添加结果
     */
    int create(Role role);

    /**
     * 批量删除角色
     *
     * @param ids 需要删除的角色ID集合
     * @return 删除结果
     */
    int delete(List<String> ids);

    /**
     * 修改角色信息
     *
     * @param id   需要修改的角色ID
     * @param role 需要修改的角色信息
     * @return 修改结果
     */
    int update(String id, Role role);

    /**
     * 分页获取角色列表
     *
     * @param pageNum  当前页数
     * @param pageSize 每页大小
     * @param keyword  角色名称关键词
     * @return 分页结果
     */
    List<Role> pageBy(Integer pageNum, Integer pageSize, String keyword);

    /**
     * 获取所有有效角色列表
     *
     * @return 所有有效角色
     */
    List<Role> listAll();

    /**
     * 根据管理员ID获取对应菜单
     *
     * @param adminId 指定的管理员ID
     * @return 指定管理员的权限菜单
     */
    List<Menu> getMenuList(String adminId);

    /**
     * 获取角色相关菜单
     *
     * @param roleId 指定的角色ID
     * @return 指定角色的权限菜单
     */
    List<Menu> listMenu(String roleId);

    /**
     * 获取角色相关资源
     *
     * @param roleId 指定的角色ID
     * @return 指定角色的权限资源
     */
    List<Resource> listResource(String roleId);

    /**
     * 给角色分配菜单
     *
     * @param roleId  指定的角色ID
     * @param menuIds 给角色赋予的权限菜单ID集合
     * @return 赋予结果菜单记录条数
     */
    int allocMenu(String roleId, List<String> menuIds);

    /**
     * 给角色分配资源
     *
     * @param roleId      指定的角色ID
     * @param resourceIds 给角色赋予的权限资源ID集合
     * @return 赋予结果资源记录条数
     */
    int allocResource(String roleId, List<String> resourceIds);
}